Skip to content

Latest commit

 

History

History
35 lines (22 loc) · 1.72 KB

[Flink]CommdLine+Springboot+flink无法指定配置文件启动.md

File metadata and controls

35 lines (22 loc) · 1.72 KB

[Flink]CommdLine+Springboot+flink无法指定配置文件启动

背景

由于项目是使用Springboot+Flink写的,用Springboot作代码框架,使用其灵活的注入特性,数据的计算使用Flink,由于项目需要支持解析不同的参数,所以使用了CommandLine包去解析命令行参数,这样写起来确实很好,但是在任务提交到集群的时候出现了一个问题。纯生Springboot应用程序的配置文件可以由--spring.profiles.active=xxx去随意切换,可是,这在本项目中行不通了,直接在命令行提交时(在jar后面指定该参数)不仅无法识别行会报错。

解决办法

Flink应用程序在启动时可以指定JVM参数,让程序在加载的时候应用指定的参数,所以让JVM去加载,我们的Springboot应用程序就可以启动并接收到参数了。以下实测可以执行:

./bin/flink run-application \
-t yarn-application \
-D jobmanager.memory.process.size=2g \
-D taskmanager.memory.process.size=2g \
-D yarn.application.name=xxxx \
-D env.java.opts="-Dspring.profiles.active=test" \
/path/to/your/xxx.jar -jn a_job_name

jar后面的-jn为使用CommandLine自定义的命令行参数,核心在于-D env.java.opts="-Dspring.profiles.active=test"

说明:以上使用Flink的Application mode运行模式可以成功提交并切换配置文件,可是使用Yarn session模式和yarn-per-job模式却不行。探索中...

补充

当使用yarn-session模式或者yarn-per-job模式提交任务时,使用

export FLINK_ENV_JAVA_OPTS="-Dspring.profiles.active=test"

可以达成想要的效果,但是-D env.java.opts="-Dspring.profiles.active=test" 却不可以,测试的Flink版本为1.12